import { createRouter, createWebHistory } from "vue-router";
import { ElLoading } from 'element-plus';
import { nextTick } from 'vue';
import { useAuthStore } from "../store/authStore";

// 路由配置
const routes = [
    {
        path: '/',
        name: 'home',
        component: () => import('../views/HomePage.vue'),
        meta: { title: '首页', icon: 'HomeFilled', loading: false },
        children: []
    },
    {
        path: '/login',
        name: 'login',
        component: () => import('../views/Login.vue'),
        meta: { title: '登录', icon: 'HomeFilled', loading: false },
    }
];

// 创建路由实例
const router = createRouter({
    history: createWebHistory(),
    routes
});

// 路由守卫
router.beforeEach((to, from, next) => {
    const authStore = useAuthStore();

    // 如果目标路径是登录页面，且已经认证，则直接跳转到其他页面
    if (to.path === '/login' && authStore.isAuth) {
        // 如果已认证，跳转到首页或其他认证后的页面
        // return next({ path: '/' });  // 或者根据需要跳转到其他页面
    }

    // 如果没有认证，强制跳转到登录页面
    if (!authStore.isAuth && to.path !== '/login') {
        next({ path: '/login' });
    } else if (to.path == '/') {
        next('/dashboards')
    }
    else {
        next();  // 放行，继续导航
    }

    // 在路由跳转之前，启动加载框
    if (to.meta.loading && authStore.isAuth) {
        const loadingInstance = ElLoading.service({
            lock: true,
            text: '加载中，请稍等...',
            background: 'rgba(0, 0, 0, 0.7)',
        });

        // 将实例和启动时间存储在路由对象中
        to.meta.loadingInstance = loadingInstance;
        to.meta.loadingStartTime = Date.now(); // 记录加载框启动时间
    }
});

router.afterEach((to, from) => {
    if (from.meta.loadingInstance) {
        from.meta.loadingInstance.close();
    }
    if (to.meta.loading && to.meta.loadingInstance) {
        // 使用 nextTick 确保页面渲染完成后再处理
        nextTick(() => {
            const elapsedTime = Date.now() - to.meta.loadingStartTime; // 计算已显示时间
            const remainingTime = 300 - elapsedTime;

            if (remainingTime > 0) {
                // 如果未达到最小显示时间，延迟关闭
                setTimeout(() => {
                    to.meta.loadingInstance.close();
                }, remainingTime);
            } else {
                // 已达到最小显示时间，直接关闭
                to.meta.loadingInstance.close();
            }
        });
    }
});

export default router;
